package com.forum.community.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.forum.community.entity.ForumCommunityDiscussion;
import com.forum.community.entity.ForumDiscussion;
import com.forum.community.entity.vo.DiscussionVo;
import com.forum.community.entity.vo.ForumDiscussionVo;
import com.forum.community.mapper.ForumDiscussionMapper;
import com.forum.community.service.ForumCommunityDiscussionService;
import com.forum.community.service.ForumDiscussionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author bncgnc
 * @since 2022-01-04
 */
@Service
public class ForumDiscussionServiceImpl extends ServiceImpl<ForumDiscussionMapper, ForumDiscussion> implements ForumDiscussionService {

    @Autowired
    ForumCommunityDiscussionService communityDiscussionService;

    @Override
    public Long addDiscussion(ForumDiscussionVo discussionVo) {
        ForumDiscussion forumDiscussion = new ForumDiscussion();
        BeanUtils.copyProperties(discussionVo,forumDiscussion);
        if(discussionVo.getParentId()==null||discussionVo.getParentId()==0){
            forumDiscussion.setDisscussLevel(0);
        }else{
            forumDiscussion.setDisscussLevel(1);
        }
        forumDiscussion.setDisscussReply(0);
        forumDiscussion.setDisscussDeleted(0);
        boolean i = this.save(forumDiscussion);
        System.out.println(forumDiscussion.getId());

        //社区讨论表中添加数据
        ForumCommunityDiscussion forumCommunityDiscussion = new ForumCommunityDiscussion();
        forumCommunityDiscussion.setDiscussionId(forumDiscussion.getId());
        forumCommunityDiscussion.setCommunityId(discussionVo.getCommunityId());

        communityDiscussionService.save(forumCommunityDiscussion);

        return forumDiscussion.getId();
    }

    //编辑讨论时回显信息
    @Override
    public ForumDiscussionVo getDiscussionInfo(Long discussionId) {
        ForumDiscussion discussion = this.getById(discussionId);
        ForumDiscussionVo forumDiscussionVo = new ForumDiscussionVo();
        BeanUtils.copyProperties(discussion,forumDiscussionVo);
        QueryWrapper<ForumCommunityDiscussion> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("discussion_id",discussionId);
        ForumCommunityDiscussion communityDiscussion =  communityDiscussionService.list(queryWrapper).get(0);
        forumDiscussionVo.setCommunityId(communityDiscussion.getCommunityId());
        return forumDiscussionVo;
    }



    //列出所有的社区评论
    @Override
    public List<DiscussionVo> listAllDiscussion(Long communityId) {
        //根据社区id列出所有的社区评论
        QueryWrapper<ForumCommunityDiscussion> query1 = new QueryWrapper<>();
        query1.eq("community_id",communityId);
        List<ForumCommunityDiscussion> list1 = communityDiscussionService.list(query1);

        //根据得到的所有同一社区的评论列表，得到社区的所有讨论
        List<ForumDiscussion> list2 = new ArrayList<>();
        for(int i=0;i<list1.size();i++){
            ForumDiscussion discussion = this.getById(list1.get(i).getDiscussionId());
            list2.add(discussion);
        }



        //用来装所有的评论
        List<DiscussionVo> finallist= new ArrayList<>();

        //找出列表里所有的一级评论
        for(int j=0;j<list2.size();j++){

            DiscussionVo discussionVo = new DiscussionVo();
            if(list2.get(j).getDisscussLevel()==0){
                BeanUtils.copyProperties(list2.get(j),discussionVo);

                finallist.add(discussionVo);
            }


            QueryWrapper<ForumDiscussion> queryWrapper1 = new QueryWrapper<>();
            queryWrapper1.eq("parent_id",discussionVo.getId());

            //查询出一级评论id和二级评论id相等的的二级评论
            List<ForumDiscussion> listlevel2 = this.list(queryWrapper1);

            for(int x = 0;x<listlevel2.size();x++){
                DiscussionVo discussionVo2 = new DiscussionVo();
                BeanUtils.copyProperties(listlevel2.get(x),discussionVo2);
                discussionVo.getChildren().add(discussionVo2);

                //报500错误不知道为什么
            }
}



        return finallist;
    }

}

